home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 124 / cd-rom 124.iso / edu / tuxmath / tuxmathscrabble / tuxmathscrabble.exe / asymptopia / Localizer.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-11-16  |  5.8 KB  |  270 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.2)
  3.  
  4. import pygame
  5. import os
  6. from pygame.locals import *
  7. from random import random
  8.  
  9. class Localizer:
  10.     
  11.     def __init__(self, board, game):
  12.         self.board = board
  13.         self.game = game
  14.         self.board_map = None
  15.         self.M = self.board.M
  16.         self.N = self.board.N
  17.  
  18.     
  19.     def update_board_map(self):
  20.         self.board_map = self.board.get_map()
  21.  
  22.     
  23.     def localize(self, submission):
  24.         rand = int(random() * 2)
  25.         if rand == 0:
  26.             rlist = self.try_row(submission)
  27.             if rlist:
  28.                 return rlist
  29.             
  30.             rlist = self.try_col(submission)
  31.             if rlist:
  32.                 return rlist
  33.             
  34.         else:
  35.             rlist = self.try_col(submission)
  36.             if rlist:
  37.                 return rlist
  38.             
  39.             rlist = self.try_row(submission)
  40.             if rlist:
  41.                 return rlist
  42.             
  43.         return None
  44.  
  45.     
  46.     def try_row(self, submission):
  47.         board_map = self.board_map
  48.         M = self.M
  49.         N = self.N
  50.         if len(submission) == 0:
  51.             return None
  52.         
  53.         if len(self.board.get_listofheads()) == 0:
  54.             return None
  55.         
  56.         slim = len(submission)
  57.         nlim = (N - len(submission)) + 1
  58.         for m in range(M):
  59.             for n in range(nlim):
  60.                 ok = 1
  61.                 for sidx in range(slim):
  62.                     if submission[sidx][:3] == 'WC:':
  63.                         if board_map[m][n + sidx] == submission[sidx][3:]:
  64.                             dummy = 0
  65.                         else:
  66.                             ok = 0
  67.                     elif board_map[m][n + sidx] == '':
  68.                         dummy = 0
  69.                     else:
  70.                         ok = 0
  71.                 
  72.                 if ok == 1:
  73.                     rlist = []
  74.                     for idx in range(slim):
  75.                         tripple = [
  76.                             submission[idx],
  77.                             m,
  78.                             n + idx]
  79.                         rlist.append(tripple)
  80.                     
  81.                     rval = self.check_neighborhood(rlist)
  82.                     tuxscore = 0
  83.                     multiplier = 1
  84.                     for nn in range(n, n + len(rlist)):
  85.                         spot2check = self.board.get_spotMN(m, nn)
  86.                         if spot2check.TYPE == '2XL':
  87.                             tuxscore = tuxscore + 2
  88.                         elif spot2check.TYPE == '2XW':
  89.                             tuxscore = tuxscore + 1
  90.                             multiplier = multiplier * 2
  91.                         elif spot2check.TYPE == '3XL':
  92.                             tuxscore = tuxscore + 3
  93.                         elif spot2check.TYPE == '3XW':
  94.                             tuxscore = tuxscore + 1
  95.                             multiplier = multiplier * 3
  96.                         else:
  97.                             tuxscore = tuxscore + 1
  98.                     
  99.                     tuxscore = tuxscore * multiplier
  100.                     for idx in range(slim - 1, -1, -1):
  101.                         if rlist[idx][0][:3] == 'WC:':
  102.                             rlist.pop(idx)
  103.                         
  104.                     
  105.                     if rval == 1:
  106.                         self.game.tuxscore = self.game.tuxscore + tuxscore
  107.                         return rlist
  108.                     
  109.                 
  110.             
  111.         
  112.         return None
  113.  
  114.     
  115.     def try_col(self, submission):
  116.         board_map = self.board_map
  117.         M = self.M
  118.         N = self.N
  119.         if len(submission) == 0:
  120.             return None
  121.         
  122.         if len(self.board.get_listofheads()) == 0:
  123.             return None
  124.         
  125.         slim = len(submission)
  126.         mlim = (M - len(submission)) + 1
  127.         for n in range(N):
  128.             for m in range(mlim):
  129.                 ok = 1
  130.                 for sidx in range(slim):
  131.                     if submission[sidx][:3] == 'WC:':
  132.                         if board_map[m + sidx][n] == submission[sidx][3:]:
  133.                             dummy = 0
  134.                         else:
  135.                             ok = 0
  136.                     elif board_map[m + sidx][n] == '':
  137.                         dummy = 0
  138.                     else:
  139.                         ok = 0
  140.                 
  141.                 if ok == 1:
  142.                     rlist = []
  143.                     for idx in range(slim):
  144.                         tripple = [
  145.                             submission[idx],
  146.                             m + idx,
  147.                             n]
  148.                         rlist.append(tripple)
  149.                     
  150.                     rval = self.check_neighborhood(rlist)
  151.                     tuxscore = 0
  152.                     multiplier = 1
  153.                     for mm in range(m, m + len(rlist)):
  154.                         spot2check = self.board.get_spotMN(mm, n)
  155.                         if spot2check.TYPE == '2XL':
  156.                             tuxscore = tuxscore + 2
  157.                         elif spot2check.TYPE == '2XW':
  158.                             tuxscore = tuxscore + 1
  159.                             multiplier = multiplier * 2
  160.                         elif spot2check.TYPE == '3XL':
  161.                             tuxscore = tuxscore + 3
  162.                         elif spot2check.TYPE == '3XW':
  163.                             tuxscore = tuxscore + 1
  164.                             multiplier = multiplier * 3
  165.                         else:
  166.                             tuxscore = tuxscore + 1
  167.                     
  168.                     tuxscore = tuxscore * multiplier
  169.                     for idx in range(slim - 1, -1, -1):
  170.                         if rlist[idx][0][:3] == 'WC:':
  171.                             rlist.pop(idx)
  172.                         
  173.                     
  174.                     if rval == 1:
  175.                         self.game.tuxscore = self.game.tuxscore + tuxscore
  176.                         return rlist
  177.                     
  178.                 
  179.             
  180.         
  181.         return None
  182.  
  183.     
  184.     def check_neighborhood(self, rlist):
  185.         board_map = self.board_map
  186.         M = self.M
  187.         N = self.N
  188.         ok = 1
  189.         slen = len(rlist)
  190.         head = (rlist[0][1], rlist[0][2])
  191.         tail = (rlist[slen - 1][1], rlist[slen - 1][2])
  192.         if rlist[0][2] == rlist[1][2]:
  193.             iscol = 1
  194.             col = rlist[0][2]
  195.         else:
  196.             iscol = 0
  197.             row = rlist[0][1]
  198.         if iscol:
  199.             if head[0] == 0:
  200.                 pass
  201.             elif board_map[head[0] - 1][col] != '':
  202.                 ok = -1
  203.                 return ok
  204.             
  205.             if tail[0] == M - 1:
  206.                 pass
  207.             elif board_map[tail[0] + 1][col] != '':
  208.                 ok = -2
  209.                 return ok
  210.             
  211.             if col == 0:
  212.                 pass
  213.             else:
  214.                 for qty in rlist:
  215.                     if qty[0][:3] == 'WC:':
  216.                         pass
  217.                     elif board_map[qty[1]][col - 1] != '':
  218.                         ok = -3
  219.                         return ok
  220.                     
  221.                 
  222.             if col == N - 1:
  223.                 pass
  224.             else:
  225.                 for qty in rlist:
  226.                     if qty[0][:3] == 'WC:':
  227.                         pass
  228.                     elif board_map[qty[1]][col + 1] != '':
  229.                         ok = -4
  230.                         return ok
  231.                     
  232.                 
  233.         elif head[1] == 0:
  234.             pass
  235.         elif board_map[row][head[1] - 1] != '':
  236.             ok = -5
  237.             return ok
  238.         
  239.         if tail[1] == N - 1:
  240.             pass
  241.         elif board_map[row][tail[1] + 1] != '':
  242.             ok = -6
  243.             return ok
  244.         
  245.         if row == 0:
  246.             pass
  247.         else:
  248.             for qty in rlist:
  249.                 if qty[0][:3] == 'WC:':
  250.                     pass
  251.                 elif board_map[row - 1][qty[2]] != '':
  252.                     ok = -7
  253.                     return ok
  254.                 
  255.             
  256.         if head[0] == M - 1:
  257.             pass
  258.         else:
  259.             for qty in rlist:
  260.                 if qty[0][:3] == 'WC:':
  261.                     pass
  262.                 elif board_map[row + 1][qty[2]] != '':
  263.                     ok = -8
  264.                     return ok
  265.                 
  266.             
  267.         return ok
  268.  
  269.  
  270.